#ifndef DW_GRAPHICS_CAMERA_H
#	define DW_GRAPHICS_CAMERA_H

# include "object.h"

namespace dw {
	namespace graphics {

class Camera
:	public Object
{
public : //! @name Construction & Destruction
	//! @{
	Camera();
	Camera(const Camera& ref);
	virtual ~Camera();
	//! @}

public : //! @name Object interface
	//! @{
	virtual Type getType() const ;
	//! @}

public : //! @name Setup
	//! @{
	void setAspectRatio(float aspectRatio);
	void setFOV(float fov);
	void setNearClipDist(float nearClipDist);
	void setFarClipDist(float farClipDist);
	//! @}

public : //! @name State
	//! @{
	float getFov() const ;
	float getAspectRatio() const ;
	float getNearClipDist() const ;
	float getFarClipDist() const ;
	maths::Matrix4f getProjectionMatrix() const ;
	//! @}

private : //! @name Data
	//! @{
	float m_fov; //!< Field of view in radians
	float m_aspectRatio;
	float m_nearClipDist;
	float m_farClipDist;
	//! @}
	
	friend std::ostream& operator << (std::ostream&, const Camera&);
	friend std::istream& operator >> (std::istream&, Camera&);
};

	} // namespace graphics
} // namespace dw

#include "graphics/camera.inl"

#endif // !DW_GRAPHICS_CAMERA_H
